"""
多重继承，Py也支持多重继承，带有多个基类的类定义语法如下：
    class DerivedClassName(Base1, Base2, Base3):
        <statement-1>
        .
        .
        .
        <statement-2>

参考文档：https://docs.python.org/zh-cn/3/tutorial/classes.html#class-definition-syntax



"""

def testMultipleInheritance():
    """
    多重继承的例子
    """

    class Line:
        """
        Line Class
        """

        def __init__(self, shape):
            self.shape = shape
        
        def getShape(self):
            # 
            return self.shape
        
    class Color:
        """
        Color Class
        """

        def __init__(self, color):
            self.color = color
        
        def getColor(self):
            return self.color

    # Circle是个多重继承类，有两个父类Line和Color
    class Circle(Line, Color):
        """
        使用多重继承的类
        """

        """
        对于多数应用来说，在最简单的情况下，可以认为搜索从父类所继承属性的操作是深度优先，从左到右的
        当层次结构存在重叠时不会在同一类中搜索两次

        但是真实情况比这个复杂一些：方法解析顺序会动态改变以支持对super的协同调用，这种方式在某些其他多重继承语言中被称之为
        后续方法调用；

        动态改变是有必要的，因为所有多重继承的情况都会显示一个或者更多的菱形关联，也就是说最少有一个父类可以
        通过多条路径访问；
        例如所有的类都继承自Object，就是说所有的类都提供一条以上的路径访问Object；
        为了确保基类不会被访问一次以上，动态算法用一种特殊方法将搜索顺序线性化
        """

        # 这个类不定义任何属性，但是它会有父类的属性和方法
        def __init__(self, shape, color):
            """
            子类构造函数的写法
            """
            super(Line, self).__init__(shape)
            Color.__init__(color)

    # 多重继承的构造函数
    circle = Circle("Bold", "red")
    
    # 继承自父类的方法
    print(circle.getShape())
    print(circle.getColor())

testMultipleInheritance()
            